#ifndef __BSP_GPIO_H
#define __BSP_GPIO_H

#include "fsl_common.h"
#include "fsl_iomuxc.h"
#include "MCIMX6Y2.h"

typedef enum _gpio_pin_direction{
    gpio_output = 1u,
    gpio_input = 0u,
}gpio_pin_direction_t;

typedef enum _gpio_interruput_mode{
    kGPIO_NoINTmode = 0u,
    kGPIO_INTLowLevel = 1u,
    kGPIO_INTHighLevel = 2u,
    kGPIO_INTRisingEdge = 3u,
    kGPIO_INTFallingEdge = 4u,
    kGPIO_INTRisingOrFallingEdge = 5u,
}gpio_interrput_mode_t;

typedef struct _gpio_pin_config{
    gpio_pin_direction_t direction;
    int output;
    gpio_interrput_mode_t interruputMode;
}gpio_pin_config_t;

void gpio_init(GPIO_Type *gpio , int IO_num , gpio_pin_config_t *config);
void gpio_write_pin(GPIO_Type *gpio , int IO_num , int value);
int gpio_read_pin(GPIO_Type *gpio , int IO_num);
void gpio_interruput_enable(GPIO_Type *gpio , int IO_num );
void gpio_interruput_disable(GPIO_Type *gpio , int IO_num );
void gpio_interruput_clearflags(GPIO_Type *gpio , int IO_num );
void gpio_interruput_init(GPIO_Type *gpio , int IO_num , gpio_interrput_mode_t mode);

#endif 